/*通用的function currying(){}，function currying(){}接受一个参数，即
将要被currying 的函数。在这个例子里，这个函数的作用遍历本月每天的开销并求出它们的总和。*/
var currying =function(fn){
    var args=[];
    return function(){
        if(arguments.length===0){
            return fn.apply(this,args);
        }else{
            [].push.apply(args,arguments);
            return arguments.callee;
        }
    }
}
var cost=(function(){
    var money=0;
    return function(){
        for(var i=0,l=arguments.length;i<l;i++){
            money+=arguments[i];
        }
        return money;
    }
})();
var cost = currying( cost ); // 转化成currying 函数
cost( 100 ); // 未真正求值
cost( 200 ); // 未真正求值
cost( 300 ); // 未真正求值
console.log(cost())
/*当调用cost()时，如果明确地带上了一些参数，
表示此时并不进行真正的求值计算，而是把这些参数保存起来，此时让cost 函数返回另外一个
函数。只有当我们以不带参数的形式执行cost()时，才利用前面保存的所有参数，真正开始进行
求值计算。*/